home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / cbdsqr.z / cbdsqr
Text File  |  1996-03-14  |  7KB  |  199 lines

  1.  
  2.  
  3.  
  4. CCCCBBBBDDDDSSSSQQQQRRRR((((3333FFFF))))                                                          CCCCBBBBDDDDSSSSQQQQRRRR((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      CBDSQR - compute the singular value decomposition (SVD) of a real N-by-N
  10.      (upper or lower) bidiagonal matrix B
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      SUBROUTINE CBDSQR( UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, C,
  14.                         LDC, RWORK, INFO )
  15.  
  16.          CHARACTER      UPLO
  17.  
  18.          INTEGER        INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU
  19.  
  20.          REAL           D( * ), E( * ), RWORK( * )
  21.  
  22.          COMPLEX        C( LDC, * ), U( LDU, * ), VT( LDVT, * )
  23.  
  24. PPPPUUUURRRRPPPPOOOOSSSSEEEE
  25.      CBDSQR computes the singular value decomposition (SVD) of a real N-by-N
  26.      (upper or lower) bidiagonal matrix B:  B = Q * S * P' (P' denotes the
  27.      transpose of P), where S is a diagonal matrix with non-negative diagonal
  28.      elements (the singular values of B), and Q and P are orthogonal matrices.
  29.  
  30.      The routine computes S, and optionally computes U * Q, P' * VT, or Q' *
  31.      C, for given complex input matrices U, VT, and C.
  32.  
  33.      See "Computing  Small Singular Values of Bidiagonal Matrices With
  34.      Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan, LAPACK
  35.      Working Note #3 (or SIAM J. Sci. Statist. Comput. vol. 11, no. 5, pp.
  36.      873-912, Sept 1990) and
  37.      "Accurate singular values and differential qd algorithms," by B. Parlett
  38.      and V. Fernando, Technical Report CPAM-554, Mathematics Department,
  39.      University of California at Berkeley, July 1992 for a detailed
  40.      description of the algorithm.
  41.  
  42.  
  43. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  44.      UPLO    (input) CHARACTER*1
  45.              = 'U':  B is upper bidiagonal;
  46.              = 'L':  B is lower bidiagonal.
  47.  
  48.      N       (input) INTEGER
  49.              The order of the matrix B.  N >= 0.
  50.  
  51.      NCVT    (input) INTEGER
  52.              The number of columns of the matrix VT. NCVT >= 0.
  53.  
  54.      NRU     (input) INTEGER
  55.              The number of rows of the matrix U. NRU >= 0.
  56.  
  57.      NCC     (input) INTEGER
  58.              The number of columns of the matrix C. NCC >= 0.
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. CCCCBBBBDDDDSSSSQQQQRRRR((((3333FFFF))))                                                          CCCCBBBBDDDDSSSSQQQQRRRR((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      D       (input/output) REAL array, dimension (N)
  75.              On entry, the n diagonal elements of the bidiagonal matrix B.  On
  76.              exit, if INFO=0, the singular values of B in decreasing order.
  77.  
  78.      E       (input/output) REAL array, dimension (N)
  79.              On entry, the elements of E contain the offdiagonal elements of
  80.              of the bidiagonal matrix whose SVD is desired. On normal exit
  81.              (INFO = 0), E is destroyed.  If the algorithm does not converge
  82.              (INFO > 0), D and E will contain the diagonal and superdiagonal
  83.              elements of a bidiagonal matrix orthogonally equivalent to the
  84.              one given as input. E(N) is used for workspace.
  85.  
  86.      VT      (input/output) COMPLEX array, dimension (LDVT, NCVT)
  87.              On entry, an N-by-NCVT matrix VT.  On exit, VT is overwritten by
  88.              P' * VT.  VT is not referenced if NCVT = 0.
  89.  
  90.      LDVT    (input) INTEGER
  91.              The leading dimension of the array VT.  LDVT >= max(1,N) if NCVT
  92.              > 0; LDVT >= 1 if NCVT = 0.
  93.  
  94.      U       (input/output) COMPLEX array, dimension (LDU, N)
  95.              On entry, an NRU-by-N matrix U.  On exit, U is overwritten by U *
  96.              Q.  U is not referenced if NRU = 0.
  97.  
  98.      LDU     (input) INTEGER
  99.              The leading dimension of the array U.  LDU >= max(1,NRU).
  100.  
  101.      C       (input/output) COMPLEX array, dimension (LDC, NCC)
  102.              On entry, an N-by-NCC matrix C.  On exit, C is overwritten by Q'
  103.              * C.  C is not referenced if NCC = 0.
  104.  
  105.      LDC     (input) INTEGER
  106.              The leading dimension of the array C.  LDC >= max(1,N) if NCC >
  107.              0; LDC >=1 if NCC = 0.
  108.  
  109.      RWORK   (workspace) REAL array, dimension
  110.              2*N  if only singular values wanted (NCVT = NRU = NCC = 0) max(
  111.              1, 4*N-4 ) otherwise
  112.  
  113.      INFO    (output) INTEGER
  114.              = 0:  successful exit
  115.              < 0:  If INFO = -i, the i-th argument had an illegal value
  116.              > 0:  the algorithm did not converge; D and E contain the
  117.              elements of a bidiagonal matrix which is orthogonally similar to
  118.              the input matrix B;  if INFO = i, i elements of E have not
  119.              converged to zero.
  120.  
  121. PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
  122.      TOLMUL  REAL, default = max(10,min(100,EPS**(-1/8)))
  123.              TOLMUL controls the convergence criterion of the QR loop.  If it
  124.              is positive, TOLMUL*EPS is the desired relative precision in the
  125.              computed singular values.  If it is negative,
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. CCCCBBBBDDDDSSSSQQQQRRRR((((3333FFFF))))                                                          CCCCBBBBDDDDSSSSQQQQRRRR((((3333FFFF))))
  137.  
  138.  
  139.  
  140.              abs(TOLMUL*EPS*sigma_max) is the desired absolute accuracy in the
  141.              computed singular values (corresponds to relative accuracy
  142.              abs(TOLMUL*EPS) in the largest singular value.  abs(TOLMUL)
  143.              should be between 1 and 1/EPS, and preferably between 10 (for
  144.              fast convergence) and .1/EPS (for there to be some accuracy in
  145.              the results).  Default is to lose at either one eighth or 2 of
  146.              the available decimal digits in each computed singular value
  147.              (whichever is smaller).
  148.  
  149.      MAXITR  INTEGER, default = 6
  150.              MAXITR controls the maximum number of passes of the algorithm
  151.              through its inner loop. The algorithms stops (and so fails to
  152.              converge) if the number of passes through the inner loop exceeds
  153.              MAXITR*N**2.
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.